﻿#ifndef CLIENTSESSION_H_  
#define CLIENTSESSION_H_

#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <cstdlib>
#include <cstring>

using boost::asio::ip::tcp;
using namespace std;

class ClientSession: public boost::enable_shared_from_this<ClientSession>{
	public:
		ClientSession(boost::asio::io_service& ioservice);
		~ClientSession();
		tcp::socket& getSocket()
    {
        return _socket;
    }
    void start();
	private:
		void handle_write(const boost::system::error_code& error);
		void handle_read(const boost::system::error_code& error);
		void login();
		void processLogin(const boost::system::error_code& error, const string& lastReadLoginName);
		void authLogin(const boost::system::error_code& error, const string& loginName, const string& lastReadPwd);
		//命令(4位):长度(8位):文件名(255位) 数据。。。
		void cmdProcess(const boost::system::error_code& error);
		void recevieveFile(const boost::system::error_code& error);	
		tcp::socket _socket;
		string _cmd;
    char _data[1024];	
    bool _authLogin;
    int _readFlag; //1-表示读取完整， 0-表示读取不完整
};

#endif